package vip.xiaonuo.bi.modular.dataset.enums;

/**
 * @auther: 顾育司
 * @Description doris使用的函数设置
 * @date: 2024/1/6
 */
public enum DorisFunc {

    /**
     * 日期函数 date_format
     */
    // 年 2023
    YEAR("date_format(`FIELD`, '%Y')",DorisFuncType.DATE),

    // 年季 2023W1
    YEAR_SEASON("concat(year(`FIELD`),'Q',quarter(`FIELD`))",DorisFuncType.DATE),

    // 年月 2023/12
    YEAR_MONTH("date_format(`FIELD`, '%Y/%m')",DorisFuncType.DATE),

    // 年-周 2023W1
    YEAR_WEEK("date_format(`FIELD`, '%YW%u')",DorisFuncType.DATE),

    // 年-天 2023/01/01
    YEAR_MONTH_DAY("date_format(`FIELD`, '%Y/%m/%d')",DorisFuncType.DATE),

    // 年-天-日
    YEAR_MONTH_DAY_H("date_format(`FIELD`, '%H')",DorisFuncType.DATE),

    // 年-天-日-分
    YEAR_MONTH_DAY_H_M("date_format(`FIELD`, '%H:%i')",DorisFuncType.DATE),


    /**
     * 聚合函数
     */
    // 求和
    SUM("ifnull(sum(`FIELD` + 0),0)",DorisFuncType.AGG),

    // 平均值
    AVERAGE("ifnull(avg( `FIELD` + 0),0)",DorisFuncType.AGG),

    // 最大值
    MAXIMUM("ifnull(max(`FIELD`),0)",DorisFuncType.AGG),

    // 最小值
    MINIMUM("ifnull(min(`FIELD`),0)",DorisFuncType.AGG),

    // 统计
    COUNT("count(`FIELD`)",DorisFuncType.AGG),

    // 去重统计
    DERECOUNT("count(DISTINCT `FIELD`)",DorisFuncType.AGG),
    ;
    private String func;

    private DorisFuncType type;

    DorisFunc(String func){
        this.func = func;
    }
    DorisFunc(String func,DorisFuncType type){
        this.func = func;
        this.type = type;
    }
    public static DorisFunc getInstance(String FuncName){
        return valueOf(FuncName.toUpperCase());
    }

    public static void main(String[] args) {
        System.out.println(getInstance("yeAr").func);
    }

    public static enum DorisFuncType{
        DATE, // 时间类型
        AGG, // 聚合类型 其他待补

    }
}
